package com.itany.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.concurrent.TimeUnit;

@Component
public class RedisUtil {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /*
     * 操作String
     */
    /**
     * 设置key-value
     */
    public void set(String key,String value){
        redisTemplate.opsForValue().set(key,value);
    }

    /**
     * 设置key-value和超时时间（秒）
     * @param key
     * @param value
     * @param timeout
     */
    public void set(String key,String value,long timeout){
        redisTemplate.opsForValue().set(key,value,timeout,TimeUnit.SECONDS);
    }

    /**
     * 返回key所关联的字符串
     * @param key
     * @return
     */
    public String get(String key){
        return redisTemplate.opsForValue().get(key);
    }


    /*
     * 操作List
     */
    /**
     * 向列表的头部添加多个value
     * @param key
     * @param values
     * @return long 返回执行的列表的长度
     */
    public long lpush(String key,String... values){
        return redisTemplate.opsForList().leftPushAll(key,values);
    }

    /**
     * 向列表的尾部添加多个value
     * @param key
     * @param values
     * @return long 返回执行的列表的长度
     */
    public long rpush(String key,String... values){
        return redisTemplate.opsForList().rightPushAll(key,values);
    }

    /**
     * 获取列表中指定索引范围的元素
     * @param key
     * @param start
     * @param end
     * @return
     */
    public List<String> lrange(String key, long start, long end){
        return redisTemplate.opsForList().range(key,start,end);
    }

    /*
     * 操作Hash
     */
    /**
     * 向哈希表key中添加一个field，值为value
     * @param key
     * @param field
     * @param value
     */
    public void hset(String key,String field,String value){
        redisTemplate.opsForHash().put(key,field,value);
    }

    /**
     * 获取哈希表key中指定s的field
     * @param key
     * @param field
     * @return
     */
    public String hget(String key,String field){
        return (String) redisTemplate.opsForHash().get(key,field);
    }

    /*
     * 其他操作
     */
    /**
     * 设置key的超时时间（秒）
     * @param key
     * @param timeout
     */
    public void expire(String key,long timeout){
        redisTemplate.expire(key,timeout,TimeUnit.SECONDS);
    }

    /**
     * 删除key
     * @param key
     */
    public void del(String key){
        redisTemplate.delete(key);
    }

    /**
     * 增加key
     * @param key
     * @param delta
     * @return
     */
    public long incr(String key,long delta){
        return redisTemplate.opsForValue().increment(key,delta);
    }

}